package com.gome.boot.common.util;

import com.gome.boot.common.enums.GenericEnum;

/**
 * 枚举工具类.
 *
 * @author baoxiufeng
 */
public final class EnumUtils {

    /**
     * 根据枚举ID获取枚举对象.
     *
     * @param values 枚举类型包含的对象列表
     * @param id 枚举ID
     * @param defaultValue 枚举默认值
     * @param <Id> 枚举ID类型
     * @param <E> 枚举类型
     * @return 匹配的枚举对象
     */
    public static <Id, E extends GenericEnum> E getById(E[] values, Id id, E defaultValue) {
        if (id == null) {
            return defaultValue;
        }
        for (E value : values) {
            if (value.getId().toString().equals(id.toString())) {
                return value;
            }
        }
        return defaultValue;
    }

    /**
     * 根据枚举代码获取枚举对象.
     *
     * @param values 枚举类型包含的对象列表
     * @param code 枚举代码
     * @param defaultValue 枚举默认值
     * @param <Code> 枚举ID类型
     * @param <E> 枚举类型
     * @return 匹配的枚举对象
     */
    public static <Code, E extends GenericEnum> E getByCode(E[] values, Code code, E defaultValue) {
        if (code == null) {
            return defaultValue;
        }
        for (E value : values) {
            if (value.getCode().toString().equals(code.toString())) {
                return value;
            }
        }
        return defaultValue;
    }
}
